import { getToken, setToken, removeToken, setTime } from '@/utils/auth'
import { login, getInfo, getFhotoTD, } from '@/api/user'   //登录接口
import { resetRouter } from '@/router/index'
const state = {
  token: getToken(), // 从Cookien中读 token字符串
  userInfo: {}
}
// 修改状态
const mutations = {
  //更新token
  setToken(state, token) {
    state.token = token //将请求回来的 token  给 state
    setToken(token) // 实现数据持久化,将 token存储到 Cookien
  },
  // 删除token缓存 退出登录
  removeToken(state) {
    state.token = null  // 取消登录状态
    removeToken()
  },
  // 跟新 userInfo 用户信息
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  // 退出登录时删除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  },

}
// 执行异步
const actions = {
  // 提交登录获取token
  async doLogin(context, data) {
    // 设置了相应拦截器 返回的是确定的token数据
    const result = await login(data) // 调接口获取token
    context.commit('setToken', result)
    setTime() // 获取拿到token时的时间
  },
  // 获取用户信息
  async getUserInfo(context) {
    const data = await getInfo() //调用接口获取用户信息(包含用户头像)
    const baseInfo = await getFhotoTD(data.userId) // 获取员工信息
    context.commit('setUserInfo', { ...data, ...baseInfo }) // 合并两次获取的资料  
    return data
  },
  // 退出登录
  logout(context) {
    //退出登录时 删除token和用户信息
    context.commit('removeToken')
    context.commit('removeUserInfo')
    // 重置路由表
    resetRouter()
    // 删除vuex中的 路由表 (routes) 操作兄弟模块的mutations 需要添加第三个参数  { root: true }
    context.commit('permission/routes', [], { root: true })
  }
}



export default {
  namespaced: true,
  state,
  mutations,
  actions
}

